7.9 分组进阶应用之分组排名
在对数据完成分组后,可以执行不同的数据处理,比如前面的聚合、转换、过滤就是常见的分组处理方式,不同的处理方式可能会使用不同的处理函数,函数apply,可以遍历Series中的每个元素,也可以遍历DataFrame表格中每行或每列数据,在分组下遍历的是每个分组的DataFrame子表。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.09 分组进阶应用之分组排名.xlsx" )
print (df)
df[ "总排名" ]=(df.数学+df.语文).rank(ascending=True)
print (df)
t=df.groupby( "班级" ).apply(lambda d:(d.数学+d.语文).rank(ascending=True))
# 把df[ "总排名"]完成放下来,d:表示子表,子表后面的df改成d
print (t)
df=df.assign(分组排名=1)
print (df)
t2=df.groupby( "班级" ).apply( lambda d:d.assign(分组排名=(d.数学+d.语文).rank( ascending = True )))
# 把df.assign(分组排名=放入后面的d
print (t2)
返回df原表:
| 班级 | 姓名 | 语文 | 数学 | |
|---|---|---|---|---|
| 0 | 1班 | 张三 | 90 | 83 |
| 1 | 1班 | 李四 | 100 | 87 |
| 2 | 1班 | 王五 | 95 | 88 |
| 3 | 2班 | 郭流子 | 81 | 97 |
| 4 | 2班 | 许麻子 | 92 | 89 |
| 5 | 3班 | 宋狗子 | 89 | 88 |
| 6 | 3班 | 小曾 | 84 | 84 |
| 7 | 3班 | 韦大宝 | 87 | 94 |
返回df(总排名):
| 班级 | 姓名 | 语文 | 数学 | 总排名 | |
| 0 | 1班 | 张三 | 90 | 83 | 2.0 |
| 1 | 1班 | 李四 | 100 | 87 | 8.0 |
| 2 | 1班 | 王五 | 95 | 88 | 7.0 |
| 3 | 2班 | 郭流子 | 81 | 97 | 4.0 |
| 4 | 2班 | 许麻子 | 92 | 89 | 5.5 |
| 5 | 3班 | 宋狗子 | 89 | 88 | 3.0 |
| 6 | 3班 | 小曾 | 84 | 84 | 1.0 |
| 7 | 3班 | 韦大宝 | 87 | 94 | 5.5 |
返回t1:
| 班级 | ||
|---|---|---|
| 1班 | 0 | 1.0 |
| 1 | 3.0 | |
| 2 | 2.0 | |
| 2班 | 3 | 1.0 |
| 4 | 2.0 | |
| 3班 | 5 | 2.0 |
| 6 | 1.0 | |
| 7 | 3.0 |
dtype: float64
返回df+t1:
| 班级 | 姓名 | 语文 | 数学 | 总排名 | 分组排名 | |
|---|---|---|---|---|---|---|
| 0 | 1班 | 张三 | 90 | 83 | 2.0 | 1 |
| 1 | 1班 | 李四 | 100 | 87 | 8.0 | 1 |
| 2 | 1班 | 王五 | 95 | 88 | 7.0 | 1 |
| 3 | 2班 | 郭流子 | 81 | 97 | 4.0 | 1 |
| 4 | 2班 | 许麻子 | 92 | 89 | 5.5 | 1 |
| 5 | 3班 | 宋狗子 | 89 | 88 | 3.0 | 1 |
| 6 | 3班 | 小曾 | 84 | 84 | 1.0 | 1 |
| 7 | 3班 | 韦大宝 | 87 | 94 | 5.5 | 1 |
返回df+t2:
| 班级 | 姓名 | 语文 | 数学 | 总排名 | 分组排名 | ||
|---|---|---|---|---|---|---|---|
| 班级 | |||||||
| 1班 | 0 | 1班 | 张三 | 90 | 83 | 2.0 | 1.0 |
| 1 | 1班 | 李四 | 100 | 87 | 8.0 | 3.0 | |
| 2 | 1班 | 王五 | 95 | 88 | 7.0 | 2.0 | |
| 2班 | 3 | 2班 | 郭流子 | 81 | 97 | 4.0 | 1.0 |
| 4 | 2班 | 许麻子 | 92 | 89 | 5.5 | 2.0 | |
| 3班 | 5 | 3班 | 宋狗子 | 89 | 88 | 3.0 | 2.0 |
| 6 | 3班 | 小曾 | 84 | 84 | 1.0 | 1.0 | |
| 7 | 3班 | 韦大宝 | 87 | 94 | 5.5 | 3.0 |